package br.com.firula.web.filter;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import br.com.firula.to.AdministradorTO;

public class RewriteFilter implements Filter {

	HashMap<String, String> hashEntidades;

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		HttpSession session = request.getSession();

		// Domain and Path variables: domain/path
		//String domain = request.getServerName();
		String path = request.getServletPath();
		String[] tokens = path.replaceFirst("/", "").split("/");

		String url = "";

		AdministradorTO administrador = (AdministradorTO)session.getAttribute("ADMINISTRADOR");
		boolean isADM = false;
		if(administrador != null)
			isADM = true;

		if (tokens[0].equalsIgnoreCase("adm")){
			if (!isADM){ // Sem usuário adm na sessão
				if (tokens.length > 1 && tokens[1].equalsIgnoreCase("painel") &&
					(request.getParameter("email") == null || request.getParameter("email").equalsIgnoreCase("")) &&
					(request.getParameter("senha") == null || request.getParameter("senha").equalsIgnoreCase(""))){
					response.sendRedirect("/firula/adm");
					return;
				}else{
					url = "login_Administrador.html";
				}
			}else { // Com usuário adm na sessão
				if (tokens.length == 2 && (tokens[1].equalsIgnoreCase("painel") || tokens[1].equalsIgnoreCase("index.jsp"))){ // Url: /adm/index.jsp OU /adm/painel
					url = "painel_Administrador.html";
				}else if (tokens.length == 3 && tokens[2].equalsIgnoreCase("logout")){
					url = "logout_Administrador.html";
				}else { // Url: /adm/painel/{tabela}/{crud}/{id}
					url = tokens[3].toLowerCase() + "_" + hashEntidades.get(tokens[2].toLowerCase()) + ".html";
					if (tokens.length == 5){
						url += "?id=" + tokens[4];
					}
				}
			}
			request.getRequestDispatcher(url).forward(req, res);
			return;
		}else if (tokens[0].equalsIgnoreCase("index")){
			url = "/login_Usuario.html";
			request.getRequestDispatcher(url).forward(req, res);
			return;
		}else if (tokens[0].equalsIgnoreCase("404")){
			url = "/404";
			request.getRequestDispatcher(url).forward(req, res);
			return;
		}

		chain.doFilter(request, response);

		/*
		if(domain.contains("lojaminhacasa.com.br") && "/index.jsp".equals(path)){
			response.sendRedirect("/minhacasa" + (request.getQueryString() != null && !request.getQueryString().equals("") ? "?" + request.getQueryString() : ""));
			return;
		}

		String userAgent = request.getHeader("user-agent");
		if(userAgent != null && !userAgent.isEmpty()) {
			userAgent = userAgent.toLowerCase();
	//		userAgent = "bot"; // Teste localhost Depoimentos, produto_box
			session.setAttribute("userAgent", userAgent);
			if("/sitemap.xml".equals(path)){
				if(!userAgent.contains("bot"))
					response.sendRedirect(ctxSendRedirect + "/index.html");
			}
		}

		if("/index.jsp".equals(path) || "/minhacasa/".equals(path) || "/minhacasa".equals(path)) {

			session.removeAttribute("LANG");
    		session.setAttribute("catalogo",false);
    		session.setAttribute("img_prefix", "");
    		session.setAttribute("WW_TRANS_I18N_LOCALE", new Locale("pt"));

    		if("/minhacasa/".equals(path) || "/minhacasa".equals(path) || domain.contains("lojaminhacasa.com.br")) {
    			request.setAttribute("parceria", "minhacasa");

    			if(request.getQueryString() != null && !request.getQueryString().equals("")) {
    				response.sendRedirect(ctxSendRedirect + "/index.html?" + request.getQueryString());
					return;
    			}
    		}

    		RequestDispatcher dispatcher = request.getRequestDispatcher("index.html?applyDecorator=true&" + request.getQueryString());
			dispatcher.forward(request, response);
			return;
		}

		// Gambis - Para o /minhacasa/manager funcionar e manter o contexto da loja
		if("/minhacasa/manager".equals(path) || "/minhacasa/manager/".equals(path)) {
			response.sendRedirect(request.getContextPath() + "/minhacasa/manager/execute_Painel.html");
			return;
		}
		if("/minhacasa/manager/execute_Painel.html".equals(path)) {
			response.sendRedirect(request.getContextPath() + "/manager/execute_Painel.html");
			return;
		}

		if(path.contains("/minhacasa") || domain.contains("lojaminhacasa.com.br")) {
			request.setAttribute("parceria", "minhacasa");

			path = path.replace("/minhacasa", "");
		} else {
			request.removeAttribute("parceria");
		}

		if(path.contains("/moveis-em-")){
			String pathCidade = path.split("/moveis-em-")[1];
			String[] cidadeTokens = pathCidade.split("-");
			if(cidadeTokens != null && cidadeTokens.length > 1){
				String estado = cidadeTokens[cidadeTokens.length - 1];
				String cidade = "";
				for (int i = 0; i < cidadeTokens.length - 1; i++){
					cidade += cidadeTokens[i];
					if (i != cidadeTokens.length - 2)
						cidade += " ";
				}
				cidade = cidade.replace("_", "-");
				url = "/cidadeHotSite_Loja.html?nomeCidade="+cidade.toUpperCase()+"&nomeEstado="+estado.toUpperCase();
				request.getRequestDispatcher(url).forward(req, res);
				return;
			}
		}

		// loja config do cache
		LojaConfigTO conf = null;
		if(isADM == false){
			try {
				CacheManager cm = CacheManager.create();
				Cache c = cm.getCache("conf");
				if (c == null){
					c = new Cache("conf", 50, false, false, 180, 180);
					cm.addCache(c);
				}


				Element e = c.get("conf");
				if (e == null){
					Filtro f2 = new Filtro();
					f2.setClazz(LojaConfigTO.class);
					List l = mgrLojaConfig.getList(f2);
					if(l != null && l.size()>0 && l.get(0)!=null) {
						conf = (LojaConfigTO)l.get(0);
						request.setAttribute("conf", conf);
						c.put(new Element("conf", conf));
					}

				} else {
					conf = (LojaConfigTO)e.getValue();
					request.setAttribute("conf", conf);

					if(conf == null)
						System.out.println("REWRITE FILTER -> Conf NULL");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else{
			Filtro f2 = new Filtro();
			f2.setClazz(LojaConfigTO.class);
			List l = mgrLojaConfig.getList(f2);
			if(l != null && l.size()>0 && l.get(0)!=null) {
				conf = (LojaConfigTO)l.get(0);
				request.setAttribute("conf", conf);
			}
		}

		String identificador = conf.getIdentificadorCupomGlobal();
		if ((session.getAttribute("cupomPromocao") == null || "".equals((String)session.getAttribute("cupomPromocao")))
				&& identificador != null && !"".equals(identificador)) {
			session.setAttribute("cupomPromocao", identificador);
		}

		if (path.indexOf("/") != -1 && path.indexOf(".") == -1  && (
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/produto")   || //proveniente de busca, item combo
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/moveis")    ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/ambientes") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/linhas")    ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/promocao")  ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/conjuntos") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/decoracao")
				) ) {

			locale = "pt";
		} else if(path.indexOf("/") != -1 && path.indexOf(".") == -1  && (
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/producto") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/lineas") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/muebles") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/promocion")
				) ) {
			locale = "es";
		} else if(path.indexOf("/") != -1 && path.indexOf(".") == -1  && (
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/product") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/lines") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/furniture") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/promotion")
				) )  {
			locale = "en";
		}

		AdministradorTO adm = (AdministradorTO)session.getAttribute("ADMINISTRADOR");
		if (adm != null) isADM = true;

		String parceria = (String) request.getAttribute("parceria");
		if(parceria == null) parceria = "mmm";

		// Campanha - Parceria HotSite
		List<CampanhaTO> campanhasHotSite = mgrCampanha.getCampanhasAtivasByModelo(isADM, CampanhaTO.MODELO_CAMPANHA_HOT_SITE);
		if(campanhasHotSite != null && campanhasHotSite.size() > 0) {
			for(CampanhaTO c :campanhasHotSite) {
				if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/" + c.getInformacao2().toLowerCase())){
					despachado = true;
					url = "/aplicarCupom_Loja.html?cupom=" + c.getInformacao() + "&redirecionamento=true";
					break;
				}
			}
		}

		// Campanha - Aplicar Cupom por Alias
		List<CampanhaTO> campanhaCupomPorAlias = mgrCampanha.getCampanhasAtivasByModelo(isADM, CampanhaTO.MODELO_CAMPANHA_APLICAR_CUPOM_POR_ALIAS);
		if(campanhaCupomPorAlias != null && campanhaCupomPorAlias.size() > 0) {
			for(CampanhaTO c :campanhaCupomPorAlias) {
				if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/" + c.getInformacao2().toLowerCase())){
					despachado = true;
					url = "/aplicarCupom_Loja.html?cupom=" + c.getInformacao();
					break;
				}
			}
		}

		// Campanha - HotSite Alias Simples
		List<CampanhaTO> campanhaAliasSimples = mgrCampanha.getCampanhasAtivasByModelo(isADM, CampanhaTO.MODELO_CAMPANHA_ALIAS_SIMPLES);
		if(campanhaAliasSimples != null && campanhaAliasSimples.size() > 0) {
			for(CampanhaTO c :campanhaAliasSimples) {
				if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/" + c.getInformacao2().toLowerCase()) && c.getParceria().equals(parceria) ){
					Long idInstitucional = c.getInstitucional().getId();
					if(idInstitucional != null) {
						despachado = true;
						url = "/institucional_Loja.html?conteudo="+idInstitucional;
					}
					break;
				}
			}
		}

		// Campanha - Aplicar Cupom Automatico
		if(!isADM) // Nao podemos ter esta lista de campanha na sessao quando esta logado no ADM, pois neste caso nao funciona o save do Campanha (dois objetos com mesmo id na sessao)
			session.setAttribute("CAMPANHAS_APLICAR_CUPOM", mgrCampanha.getCampanhasAtivasByModelo(false, CampanhaTO.MODELO_CAMPANHA_APLICAR_CUPOM_AUTOMATICO));
		else
			session.removeAttribute("CAMPANHAS_APLICAR_CUPOM");

		// Campanha - Atendimento Ausente
		List<CampanhaTO> campanhaAtendimentoAusente = mgrCampanha.getCampanhasAtivasByModelo(false, CampanhaTO.MODELO_CAMPANHA_ATENDIMENTO_AUSENTE);
		if(campanhaAtendimentoAusente != null && campanhaAtendimentoAusente.size() > 0){
			session.setAttribute("CAMPANHA_ATENDIMENTO_AUSENTE_MENSAGEM", campanhaAtendimentoAusente.get(0).getInformacao()); //Se houver mais de uma campanha do tipo v�lida, apenas a mais recente ser� aplicada
		}
		else
			session.removeAttribute("CAMPANHA_ATENDIMENTO_AUSENTE_MENSAGEM");

		if(!locale.equals("") && !despachado) {
			Long idTipo = null;
			Long idCor = null;
			Long idLinha = null;
			Boolean combo = false;
			String nomeTipo = null;
			tokens = request.getServletPath().replace("/minhacasa", "").substring(1).split("/");
			if("conjuntos".equals(tokens[0])){
				tokens[0] = "ambientes";
				combo = true;
			}
			String[] oldTokens = tokens;
			Long idProduto = mgrProduto.getProdutoByTokens(isADM, tokens, locale);
			if(idProduto == null && tokens.length >= 3){
				nomeTipo = tokens[tokens.length - 2];
				String[] newTokens = new String[tokens.length - 1];
				int i;
				for(i = 0; i < tokens.length - 2; i++)
					newTokens[i] = tokens[i];
				newTokens[i] = tokens[i+1];
				tokens = newTokens;
				idTipo = mgrCategoria.getTipoByToken(nomeTipo);
				idProduto = mgrProduto.getProdutoByTokens(isADM, tokens, locale);
			}
			if (idProduto == null){
				tokens = oldTokens;
				idTipo = null;
				idCor = null;
				idLinha = null;
				nomeTipo = null;
				Long idCategoria = mgrCategoria.getCategoriaByTokens(isADM, tokens, locale);
				if(idCategoria == null && tokens.length >= 2){
					int k = 0;
					String nomeCor = null;
					String nomeLinha = null;
					String[] newTokens = null;
					
					if(tokens[tokens.length - 1].startsWith("cor-")){
						k++;
						nomeCor = tokens[tokens.length - 1];
					}
					if(tokens[tokens.length - 2].startsWith("cor-")){
						k++;
						nomeCor = tokens[tokens.length - 2];
					}
					if(tokens[tokens.length - 1].startsWith("linha-")){
						k++;
						nomeLinha = tokens[tokens.length - 1];
					}
					if(tokens[tokens.length - 2].startsWith("linha-")){
						k++;
						nomeLinha = tokens[tokens.length - 2];
					}
					if(k > 0){
						newTokens = new String[tokens.length - k];
						for(int i = 0; i < tokens.length - k; i++)
							newTokens[i] = tokens[i];
						tokens = newTokens;
						if(nomeCor != null && !nomeCor.isEmpty())
							idCor = mgrCor.getCorByToken(nomeCor);
						if(nomeLinha != null && !nomeLinha.isEmpty())
							idLinha = mgrCategoria.getLinhaByToken(nomeLinha);
						idCategoria = mgrCategoria.getCategoriaByTokens(isADM, newTokens, locale);
					}
					
					if(idCategoria == null && tokens.length >= 2){
						nomeTipo = tokens[tokens.length - 1];
						newTokens = new String[tokens.length - 1];
						for(int i = 0; i < tokens.length - 1; i++)
							newTokens[i] = tokens[i];
						tokens = newTokens;
						idTipo = mgrCategoria.getTipoByToken(nomeTipo);
						idCategoria = mgrCategoria.getCategoriaByTokens(isADM, newTokens, locale);	
					}						
				}

				if (idCategoria != null){
					despachado = true;
					url = "/categoria_Loja.html?cat="+idCategoria+
							("&n="+(tokens.length-1))+
							(idTipo != null ? "&tipo="+idTipo : "")+
							(idCor != null ? "&cor="+idCor : "")+
							(idLinha != null ? "&linha="+idLinha : "")+
							(combo ? "&combo="+combo.toString() : "");
					String caminho = "";
					for(int i = 0; i < tokens.length; i++)
						caminho += tokens[i]+"/";
					if(nomeTipo != null)
						caminho += nomeTipo;
					request.setAttribute("caminho", caminho);
				} else {
					tokens = oldTokens;
					String token = tokens[tokens.length - 1];
					Long id = mgrProduto.getIdProdutoByNomeUrl(token);

					String params = "?q=" + token;

					if(id != null)
						params += "&ipac=" + id.toString();
					response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
				    response.setHeader("Location", ctxSendRedirect + "/busca_Loja.html" + params);
				    return;
				}
			} else {
				despachado = true;
				String[] cat_arvore = new String[tokens.length - 1];
				System.arraycopy(tokens, 0, cat_arvore, 0, cat_arvore.length);
				Long idCategoria = mgrCategoria.getCategoriaByTokens(isADM, cat_arvore, locale);
				url = "/produto_Loja.html?prod="+idProduto+
						(idCategoria!=null?"&cat="+idCategoria:"")+
						(idTipo != null ? "&tipo="+idTipo : "")+
						(idCor != null ? "&cor="+idCor : "")+
						(idLinha != null ? "&linha="+idLinha : "")+
						(combo ? "&combo="+combo.toString() : "");
				String caminho = "";
				for(int i = 0; i < tokens.length - 1; i++)
					caminho += tokens[i]+"/";
				if(nomeTipo != null)
					caminho += nomeTipo;

				request.setAttribute("caminho", caminho);
			}

		} else if(request.getParameter("csParam") != null && AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/produto_loja")) {
			String idProduto = request.getParameter("prod");

			if(idProduto != null) {
				ProdutoTO prod = mgrProduto.get(idProduto);

				url = "/produto/" + prod.getNomeUrl();

				response.sendRedirect(ctxSendRedirect + url + "?csParam=" + URLEncoder.encode(request.getParameter("csParam"), "UTF-8"));
				return;
			}
		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/busca") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/index")) {
			// String idioma = (String)request.getSession().getAttribute("LANG");
			String idioma = (String)request.getParameter("request_locale");
			locale = (idioma == null || idioma.equals("")) ? "pt" : idioma;

			if("en".equals(idioma)) {
				request.setAttribute("caminho", "product/");
			} else if("es".equals(idioma)) {
				request.setAttribute("caminho", "producto/");
			}else
				request.setAttribute("caminho", "produto/");

//		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/fidelity")){
//			String[] tempTokens = {"institucional", "fidelity"};
//			locale = "pt";
//			Long idInstitucional = mgrInstitucional.getInstitucionalByTokens(tempTokens, locale);
//			if(idInstitucional != null) {
//				session.setAttribute("ID_CAMPANHA", "315");
//				despachado = true;
//				url = "/institucional_Loja.html?conteudo="+idInstitucional;
//			}
		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/lotado")){
			despachado = true;
			url = "/lotado_Loja.html?" + request.getQueryString();
		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/horadoplaneta")){
			despachado = true;
			url = "/lotado_Loja.html";
//		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/escolhasuacreche")){
//			url = "/escolhaCreche_Loja.html";
//			response.sendRedirect(ctxSendRedirect+url);
//			return;
//		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/cartaodemadeira")){
//			url = "/cartaoMadeira_Loja.html";
//			response.sendRedirect(ctxSendRedirect+url);
//			return;
//		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/abraco")){
////			url = "/recomendacaoAbraco_Loja.html";
//			url = "/ammmigo";
//			response.sendRedirect(ctxSendRedirect+url);
//			return;
//		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/coral")){
//			url = "/promocaoCoral_Loja.html";
//			request.getRequestDispatcher(url).forward(req, res);
//			return;
		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/depoimentos")){
			despachado = true;
			url = "/viewDepoimento_Loja.html?id=" + request.getParameter("id");
		}else if (AsciiUtils.convertNonAscii(path).toLowerCase().equals("/stats")){
			url = "/manager/stats_Painel.html";
			response.sendRedirect(ctxSendRedirect+url);
			return;
		}else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/loja-de-moveis-online-com-entrega-para-todo-o-brasil")){
			url = "/mapaCidades_Loja.html";
			request.getRequestDispatcher(url).forward(req, res);
			return;
		}else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/institucional") ||
					AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/institutional") ||
					AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/osklen-institucional")){
			tokens = request.getServletPath().replace("/minhacasa", "").replace("osklen-", "").substring(1).split("/");
			locale = "pt";
			if(tokens[0].equals("institucional-es")) {
				locale = "es";
			}else if(tokens[0].equals("institutional")) {
				locale = "en";
			}

			if(tokens.length == 2) {
				Long idInstitucional = mgrInstitucional.getInstitucionalByTokens(tokens, locale);
				if(idInstitucional != null) {
					despachado = true;
					url = "/institucional_Loja.html?conteudo="+idInstitucional;
				}
			}

		}else if(AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/noticias") ||
				AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/allnews")) {
			despachado = true;

			tokens = request.getServletPath().replace("/minhacasa", "").substring(1).split("/");
			locale = "pt";
			if(tokens[0].equals("noticias-es")) {
				locale = "es";
			}else if(tokens[0].equals("allNews")) {
				locale = "en";
			}
			url = "/noticias_Loja.html";
		}else if(AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/noticia") ||
					AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/news")) {
			tokens = request.getServletPath().replace("/minhacasa", "").substring(1).split("/");

			locale = "pt";
			if(tokens[0].equals("noticia-es")) {
				locale = "es";
			}else if(tokens[0].equals("news")) {
				locale = "en";
			}

			if(tokens.length == 2) {
				Long idNoticia = mgrNoticia.getNoticiasByTokens(tokens, locale);
				if(idNoticia != null) {
					despachado = true;
					url = "/noticia_Loja.html?id="+idNoticia;
				}
			}
		} else if(AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/afiliado")) {
			//despachado = true;

			String idAfiliado = "";
			AfiliadoTO afiliado = (AfiliadoTO)session.getAttribute("AFILIADO");
			if(afiliado != null)
				idAfiliado = afiliado.getId().toString();

			if(AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/afiliado/login"))
				url = "/login_AfiliadoLoja.html";
			else if (AsciiUtils.convertNonAscii(path).toLowerCase().equals("/afiliado/dados"))
				url = "/view_AfiliadoLoja.html"+(idAfiliado.equals("")?"":"?id="+idAfiliado);
			else if (AsciiUtils.convertNonAscii(path).toLowerCase().equals("/afiliado/cadastro"))
				url = "/edit_AfiliadoLoja.html"+(idAfiliado.equals("")?"":"?id="+idAfiliado);
			else if(AsciiUtils.convertNonAscii(path).toLowerCase().equals("/afiliado/relatorio"))
				url = "/relatorio_AfiliadoLoja.html"+(idAfiliado.equals("")?"":"?id="+idAfiliado);
			else if(AsciiUtils.convertNonAscii(path).toLowerCase().equals("/afiliado/novo"))
				url = "/novo_AfiliadoLoja.html";
			else
				url = path;

			response.sendRedirect(ctxSendRedirect+url);
			return;

		} else if (AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/fidelidade")){
			String parametro = request.getParameter("fidelidade");
			if(AsciiUtils.convertNonAscii(path).toLowerCase().startsWith("/fidelidade-cadastro")) {
				//session.setAttribute("abraco", "true");
				url = "/novo_ClienteLoja.html?pf=true&"+(request.getQueryString() != null ? request.getQueryString() : "");
			} else {
				url = "/programaFidelidade_Loja.html"+(parametro != null ? "?fidelidade="+parametro : "");
			}

			// Seta atributo para controle da testeira
			request.setAttribute("pf", true);
			response.sendRedirect(ctxSendRedirect+url);
			return;
		} else {
			String idioma = (String)request.getSession().getAttribute("LANG");
			locale = (idioma == null) ? "pt": idioma;
		}


		if((locale.equals("en") || locale.equals("es"))) {
			response.sendRedirect(request.getContextPath() + "/index.html");
			session.setAttribute("LANG", locale);
        	session.setAttribute("catalogo", true);
        	session.setAttribute("img_prefix", locale+"_");
        	session.setAttribute("WW_TRANS_I18N_LOCALE", new Locale(locale));
		} else {
			session.removeAttribute("LANG");
    		session.setAttribute("catalogo",false);
    		session.setAttribute("img_prefix", "");
    		session.setAttribute("WW_TRANS_I18N_LOCALE", new Locale("pt"));
		}

		if(!url.equals("")) {
			request.getRequestDispatcher(url).forward(req, res);
		}

		if (!despachado){
			chain.doFilter(request, response);
		}
		 */
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		try {
			WebApplicationContext  wac = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
			initHashEntidades();
//			mgrCategoria = (CategoriaBO)wac.getBean("categoriaBO");
//			mgrProduto = (ProdutoBO)wac.getBean("produtoBO");
//			mgrInstitucional = (InstitucionalBO)wac.getBean("institucionalBO");
//			mgrNoticia = (NoticiaBO)wac.getBean("noticiaBO");
//			mgrLojaConfig = (LojaConfigBO)wac.getBean("lojaConfigBO");
//			mgrCampanha = (CampanhaBO)wac.getBean("campanhaBO");
//			mgrCor = (CorBO)wac.getBean("corBO");

		}catch(Exception ignoredForNow) {
			ignoredForNow.printStackTrace();
		}
	}

	private void initHashEntidades(){
		hashEntidades = new HashMap<String, String>();
		hashEntidades.put("usuariobase", "UsuarioBase");
		hashEntidades.put("administrador", "Administrador");
		hashEntidades.put("arbitro", "Arbitro");
		hashEntidades.put("banderinha", "Banderinha");
		hashEntidades.put("bolao", "Bolao");
		hashEntidades.put("campeonato", "Campeonato");
		hashEntidades.put("comentario", "Comentario");
		hashEntidades.put("conteudista", "Conteudista");
		hashEntidades.put("estado", "Estado");
		hashEntidades.put("gol", "Gol");
		hashEntidades.put("jogador", "Jogador");
		hashEntidades.put("jogo", "Jogo");
		hashEntidades.put("modalidade", "Modalidade");
		hashEntidades.put("noticia", "Noticia");
		hashEntidades.put("pais", "Pais");
		hashEntidades.put("personagem", "Personagem");
		hashEntidades.put("promocao", "Promocao");
		hashEntidades.put("serie", "Serie");
		hashEntidades.put("tecnico", "Tecnico");
		hashEntidades.put("telefone", "Telefone");
		hashEntidades.put("time", "Time");
		hashEntidades.put("tipotelefone", "TipoTelefone");
		hashEntidades.put("tipotitulo", "TipoTitulo");
		hashEntidades.put("tipousuario", "TipoUsuario");
		hashEntidades.put("titulo", "Titulo");
		hashEntidades.put("torcida", "Torcida");
		hashEntidades.put("usuario", "Usuario");
	}

	public void destroy() {
	}

}
